package com.atguigu.gmall.item;

import lombok.Data;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class DynamicProxy {
    public static void main(String[] args) {
        // 1. 创建一个增强器
        Enhancer enhancer = new Enhancer();
        // 2. 制定增强器
        enhancer.setSuperclass(BMW.class);
        // 3. 设置回调
        enhancer.setCallback(new MethodInterceptor() {
            /**
             *
             * @param o : 被代理对象
             * @param method :方法
             * @param args : 参数
             * @param methodProxy : 代理方法
             * @return
             * @throws Throwable
             */
            @Override
            public Object intercept(
                    Object o,
                    Method method,
                    Object[] args,
                    MethodProxy methodProxy) throws Throwable {
                System.out.println("执行前");
//                method.invoke(bmw);
                // 执行父类的方法
                methodProxy.invokeSuper(o,args);
                System.out.println("执行后");
                return null;
            }
        });
        System.out.println("===================");
        BMW m = (BMW) enhancer.create();
        m.gogo();
    }
}

interface Car {
    void gogo();
}
@Data
class BMW implements Car{
    private String name;
    @Override
    public void gogo() {
        System.out.println(name + "=====>>汽车正在行驶中。");
    }
}
